import Schema from 'async-validator'
//引入弹窗组件
import '../../../../../utils/extendApi'
//引入新增地址api
import {reqAddAddress,reqAddressInfo,reqUpdateAddress} from '../../../../../api/address'
Page({
  // 页面的初始数据
  data: {
    // address: {
      name: "",//收货人
      phone: "",//手机号码
      provinceName: "",//省
      provinceCode: "",//省编码
      cityName: "",//市
      cityCode: "",//市编码
      districtName: "",//区
      districtCode: "",//区编码
      address: "",//详细地址
      fullAddress: "",//完整地址
      isDefault: false,//是否设置为默认地址
    // },
  },

  // 保存收货地址
  async saveAddrssForm(event) {
    //解构省市区，用来拼成完整地址
    const {provinceName,cityName,districtName,address,isDefault} = this.data
    //搜集表单里所有的数据
    const params = {
      ...this.data,
      fullAddress: provinceName + cityName + districtName + address,
      isDefault:isDefault?1:0
    }
    
    //使用验证库来验证参数是否符合条件
    //解构出返回的值，true符合，false不符合
    const {valid} = await this.validateAddress(params)
    
    if (!valid) {
      //不符合时不通过，中断函数
      return 
    }
    
    //验证成功后调用新增地址模块
    //需要区分是修改地址还是新增地址
    if (this.addressId) {
      //如果全局存在id，就是修改保存
     const res= await reqUpdateAddress(params)
     console.log(res);
     if (res.code === 200) {
       
      wx.navigateBack()
      wx.toast({title:'修改地址成功'})
    }
    } else{
      //如果没有id就是新增地址
      const res = await reqAddAddress(params)
    if (res.code === 200) {
      wx.navigateBack()
      wx.toast({title:'新增地址成功'})
    }
    }
    

  },

  //验证表单内容的函数
  validateAddress(params){
    //验证表单模块
    //引入正则表达式
    // 验证收货人，是否只包含大小写字母、数字和中文字符
    const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'

    // 验证手机号，是否符合中国大陆手机号码的格式
    const phoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'
    //创建规则
    const rules = {
      //姓名判断
      name:[
        // required 是否是必填项
        { required: true, message: '收货人姓名不能为空' },
        // 正则判断
        {pattern:nameRegExp,message:"收货人姓名不合法"}

      ],
      //电话判断
      phone:[
        // required 是否是必填项
        { required: true, message: '电话不能为空' },
        // 正则判断
        {pattern:phoneReg,message:"收货人电话号码不合法"}
      ],
      provinceName:[
        { required: true, message: '省份不能为空' }
      ],
      address:[
        { required: true, message: '地址不能为空' }
      ]

    }
    //创建实例等待传入验证规则
    const validator = new Schema(rules)

    return new Promise((resolve,reject)=>{
      validator.validate(params,(errors,fields)=>{
        //fields代表有哪些参数不合法
        // console.log(fields,'fields');
        if (errors) {
          //验证错误时，调用弹框，提示错误信息
          wx.toast({title:errors[0].message})
          // console.log(errors,'errors');
          resolve({valid:false})
        }else {
          //验证成功，传出true
          resolve({valid:true})
        }
      })
    })
  },

  // 省市区选择
  onAddressChange(event) {
    console.log(event);
    const [provinceName,cityName,districtName] = event.detail.value
    const [provinceCode,cityCode,districtCode] = event.detail.code
    this.setData({
      provinceName,cityName,districtName,provinceCode,cityCode,districtCode
    })
  },

  //用来处理更新相关的逻辑
  async showAddressInfo(id){
    //如果id不存在，就不执行逻辑
    if (!id) return

    //将id挂载到当前页面的实例上
    this.addressId = id
    //如果id存在，就改变标题栏
    if (id) {
      wx.setNavigationBarTitle({
        title: '修改收货地址',
      })
    }

    //通过id值，查询当前的收货地址,并且修改数据
    const res= await reqAddressInfo(id)
    // console.log(res);
    this.setData(res.data)
    //之后点击保存，需要区分是新增还是保存
  },

  //在onload中接收编辑按钮传过来的id值
   onLoad(event){
    //传入id，更新相关的函数
    this.showAddressInfo(event.id)
  }
});
